/**
* @version:1.0
* @author kevinnan.org.cn  2018212114@mail.hfut.edu.cn
* @date 2020/7/31
* @Content:空间滤波
*/

#ifndef SPATIAL_FILTER_H
#define SPATIAL_FILTER_H

#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include "gray_transform.hpp"
using namespace std;

namespace spatialfilter{
	/**
	  * 平滑线性滤波器，盒状滤波器
	  */
	cv::Mat boxFilter(cv::Mat originImage, int boxSize);


	/**
	  * "相关"计算
	  * mat1为模板，mat2为原图像
	  */
	cv::Mat relatedCalculate(cv::Mat mat1, cv::Mat mat2);


	/**
	  * 中值滤波器
	  */
	cv::Mat mediaFilter(cv::Mat originImage, int boxSize);


	/**
	  * 拉普拉斯滤波实现图像锐化
	  * way用于选择滤波器模板
	  */
	cv::Mat laprasFilter(cv::Mat originImage, int way);


	/**
	  * 模板计算
	  */
	cv::Mat templateCalculate(cv::Mat mat1, cv::Mat mat2);


	/**
	  * 非锐化掩蔽/高提升滤波
	  * k=1时，为非锐化掩蔽
	  * k>1时，为高提升滤波
	  */
	cv::Mat unsharpMask(cv::Mat originImage, int k);


	/**
	  * 梯度锐化
	  * way用于选择滤波器模板
	  */
	cv::Mat gradientSharp(cv::Mat originImage, int way);
}



#endif